// void main(List<String> args) {
//   List<List<int>> list = [
//     List.generate(75, (i) => 1 + i),
//     List.generate(75, (i) => 1 + i),
//     List.generate(75, (i) => 1 + i),
//   ];
//   print('list: $list');
//
//   List<List<int>> newList =
//       BytesUtl.getSortList_2(amount: 3, point: 5, items: list);
//   print('newList: $newList');
// }
//
// class BytesUtl {
//   /// 连续长度(point = 20, amount = 3, length = (point*point)*3)
//   static List<List<int>> getSortList({
//     required int amount,
//     required int point,
//     required List<int> items,
//   }) {
//     List<List<int>> list = List.generate(amount, (index) => []);
//     for (int i = 0; i < amount; i++) {
//       int index = i * point;
//       for (int j = 0; j < point; j++) {
//         int last = index + point;
//         List<int> list_1 = items.sublist(index, last);
//         index = last + point * (amount - 1);
//         list[i].addAll(list_1);
//       }
//     }
//     return list;
//   }
//
//   static List<List<int>> getSortList_2(
//       {required int amount,
//       required int point,
//       required List<List<int>> items}) {
//     List<List<int>> list = [];
//     for (int le = 0; le < items.length; le++) {
//       List<int> list_1 = items[le];
//       List<int> tmpList = [];
//       for (int i = 0; i < amount; i++) {
//         int index = i * point;
//         for (int j = 0; j < point; j++) {
//           int last = index + point;
//           List<int> list_2 = list_1.sublist(index, last);
//           index = last + point * (amount - 1);
//           tmpList.addAll(list_2);
//         }
//       }
//       list.add(tmpList);
//     }
//     return list;
//   }
// }

import 'dart:isolate';

// void main(){
//   multiThread();
// }
//
// void multiThread(){
//   print("multiThread start");
//   print("当前线程：${Isolate.current.debugName!}");
//   Isolate.spawn(newThread1, "hello1");
//   Isolate.spawn(newThread2, "hello2");
//   Isolate.spawn(newThread3, "hello3");
//   print("multiThread end");
// }
//
// ///创建一个子隔离区（子线程在任何时间执行）
// void newThread1(String message){
//   print("当前线程：${Isolate.current.debugName!}");
//   print(message);
// }
//
// void newThread2(String message){
//   print("当前线程：${Isolate.current.debugName!}");
//   print(message);
// }
//
// void newThread3(String message){
//   print("当前线程：${Isolate.current.debugName!}");
//   print(message);
// }
//
// void main(){
//   multiThread();
// }
//
// Future<void> multiThread() async {
//   print("multiThread start");
//   print("当前线程：${Isolate.current.debugName!}");
//
//   ///父隔离区：接收端
//   ReceivePort r1 = ReceivePort();
//   ///父隔离区：发送端-由接收端产生
//   SendPort p1 = r1.sendPort;
//   ///把父隔离区发送端交给子隔离区
//   Isolate.spawn(newThread,p1);
//
//   //接受子隔离区发来的消息
//   // var msg = r1.first;
//   // print("来自新线程的消息${msg}");
//
//   // r1.listen((message) {
//   //   print("监听接受子隔离区发来的消息: ${message}");
//   //   r1.close();
//   // });
//
//   SendPort p2 = await r1.first;
//   // p2.send("父隔离区发来的消息");
//
//   var msg = await sendToReceive(p2,"hello");
//
//   print("父隔离区收到消息： ${msg}");
//   print("multiThread end");
// }
//
// ///创建一个子隔离区（子线程在任何时间执行）
// void newThread(SendPort p1)async{
//   print("当前线程：${Isolate.current.debugName!}");
//   ///隔离区-发送消息给父隔离区
//   // p1.send("abc");
//
//   ///子隔离区：接收端
//   ReceivePort r2 = ReceivePort();
//   ///子隔离区：发送端-由接收端产生
//   SendPort p2 = r2.sendPort;
//   ///把子隔离区发送端交给父隔离区
//   p1.send(p2);
//
//   // r2.listen((message) {
//   //   print("监听接受父隔离区发来的消息: ${message}");
//   //   r2.close();
//   // });
//
//   await for(var msg in r2){
//    var data = msg[0];
//    print("子隔离区收到父隔离区的消息：${msg}");
//    SendPort replyPort  = msg[1];
//    //给父隔离区回复消息
//    replyPort.send(data);
//   }
//
//   // Future.delayed(const Duration(seconds: 2),(){
//   //   p1.send("123");
//   // });
// }
//
// Future sendToReceive(SendPort port,msg){
//   print("发送消息给给子隔离区");
//   ReceivePort response = ReceivePort();
//   port.send([msg,response.sendPort]);
//   return response.first;
// }

void main(){
  multiThread();
}

void multiThread(){
  start();
  newIsolate();
  init();
}

start(){
  print("应用启动：${DateTime.now().microsecondsSinceEpoch}");

}
newIsolate() async {
  print("父隔离区创建：${DateTime.now().microsecondsSinceEpoch}");

  ReceivePort r = ReceivePort();
  SendPort p = r.sendPort;

  Isolate childIsolate = await Isolate.spawnUri(
      Uri(path: "childIsolate.dart"),
      ["data1","data2","data3",],
      p,
  );

  r.listen((message) {
    print("父隔离区收到消息：${message}");
    if(message[1] == 1){
      //异步任务正在处理
    }else if(message[1] == 2){
      r.close();//取消监听
      childIsolate.kill();
      print("释放子隔离区");
    }
  });

}
init(){
  print("项目初始化：${DateTime.now().microsecondsSinceEpoch}");

}
